package www.dbconfig.util.service;





import www.common.util.laydata.LayDatas;
import www.common.util.laydata.PageUtils;

import java.util.List;

/**
 * @program: springboot-beatlsql
 * @description: 通用 service
 * @author: Mr.Yan
 * @create: 2018-10-11 09:34
 **/
public abstract interface BaseService<T> {

    /**
     * 查询数据集
     * @param clazz
     * @param columnStr
     * @param tableName
     * @param whereStr
     * @param groupStr
     * @param orderStr
     * @return
     */
    public List<T> findListTemplate(Class<T> clazz, String columnStr, String tableName, String whereStr, String groupStr, String orderStr);

    /**
     * 查询一条数据
     * @param clazz
     * @param columnStr
     * @param tableName
     * @param whereStr
     * @param groupStr
     * @param orderStr
     * @return
     */
    public T findOneTemplate(Class<T> clazz, String columnStr, String tableName, String whereStr, String groupStr, String orderStr);
    /**
     * 根据主键查询实体
     *
     * @param clazz,key
     * @return 返回实体
     */
    public T findByPrimaryKey(Class<T> clazz, Integer pk);


    /**
     * 查询所有数据
     *
     * @param clazz
     * @return
     */
    public List<T> findAll(Class<T> clazz);

    /**
     * 查询总记录数
     *
     * @param clazz
     * @return
     */
    public Long findAllCount(Class<T> clazz);

    /**
     * 条件查询数据
     *
     * @param clazz
     * @param param
     * @return
     */
    public List<T> findListByWhere(Class<T> clazz, Object param);

    /**
     * 条件查询总数
     *
     * @param clazz
     * @param param
     * @return
     */
    public Long findListByWhereCount(Class<T> clazz, Object param);

    /**
     * 条件查询一条记录
     *
     * @return
     */
    public T findOne(Class<T> clazz, Object param);

    /**
     * 分页查询数据
     *
     * @param clazz
     * @param param
     */
    public List<T> pageInfo(Class<T> clazz, Object param, Long start, Long size);

    /**
     * 分页查询返回 layui 数据模板
     *
     * @param sqlName
     * @param clazz
     * @param pageUtils
     * @return
     */
    public LayDatas pageLayInfo(String sqlName, Class<T> clazz, PageUtils pageUtils);

    /**
     * 插入一条数据
     *
     * @param clazz
     * @param param
     * @return
     */
    public Integer insert(Class<T> clazz, Object param);

    /**
     * 根据主键更新
     *
     * @Param:
     * @return:
     * @Author: Mr.Yan
     * @Date: 2018/10/11
     */

    public Integer update(Class<T> clazz, Object param);

    /**
     * 根据主键删除
     *
     * @param clazz
     * @param pk
     * @return
     */
    public Integer delete(Class<T> clazz, Object pk);

    /**
     * 自己写sql添加语句
     * @param sqlId
     * @param param
     * @return
     */
    public Integer commonInsert(String sqlId, Object param);

    /**
     * 自己写sql添加语句
     * @param sqlId
     * @param param
     * @return
     */
    public Integer commonDelete(String sqlId, Object param);

    /**
     * 自己写sql查询多条语句
     * @param sqlId
     * @param param
     * @return
     */
    public List<T> commonFindList(String sqlId, Class<T> clazz, Object param) ;

    /**
     * 自己写sql查询一条语句
     * @param sqlId
     * @param param
     * @return
             */
    public T commonFindOne(String sqlId, Class<T> clazz, Object param) ;

    /**
     * 自己写sql修改语句
     * @param sqlId
     * @param param
     * @return
     */
    public Integer commonUpdate(String sqlId, Object param) ;
}
